Package powercraftCombi

Source Code of powercraftCombi.Test$WeaselNativeSourceManager

package powercraftCombi;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;

import weasel.interpreter.WeaselInterpreter;
import weasel.interpreter.WeaselNativeException;

public class Test {
  boolean isMinecraft=false;
  public void loader() throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException{
    //TODO nur Mod-Files
   
    ClassLoader cl = Test.class.getClassLoader();
    Field f = ClassLoader.class.getDeclaredField("classes");
    f.setAccessible(true);
    @SuppressWarnings("unchecked")
    Vector<Class<?>> classes = (Vector<Class<?>>)f.get(cl);
    for(Class<?> c:classes){
      WeaselClassList wc = c.getAnnotation(WeaselClassList.class);
      if(wc!=null){
        for(Class<?> clazz:wc.classes()){
          WeaselNativeSourceManager.registerMethodsInClass(clazz);
        }
      }
    }
    WeaselNativeSourceManager.finished=true;
  }
 
  public static class WeaselNativeSourceManager{
    private static List<WeaselNativeMethodAccessor> methods = new ArrayList<WeaselNativeMethodAccessor>();
    public static boolean finished=false;
   
    public static void registerMethodsInClass(Class<?> c){
      WeaselNamedMethod named;
      for(Method m:c.getMethods()){
        if((named=m.getAnnotation(WeaselNamedMethod.class))!=null){
          if(((m.getModifiers()&Modifier.STATIC)!=Modifier.STATIC))
            throw new WeaselNativeException("Only static Methods can be loaded");
          parseNamesAndRegister(named, m);
        }
      }
    }
   
    public static void parseNamesAndRegister(WeaselNamedMethod wnm, Method m){
      for(String name:wnm.value()){
        int lastPoint = name.lastIndexOf('.');
        String functionName = "";
        String className = "";
        if(lastPoint==-1 || lastPoint==0)
          className = m.getDeclaringClass().getName();
        else
          className = name.substring(0, lastPoint);
         
        if(lastPoint==name.length()-1 || name.length()==0)
          //TODO durch deobfuscator jagen
          functionName = m.getName();
        else
          functionName = name.substring(lastPoint+1);
        methods.add(new WeaselNativeMethodAccessor(className, functionName, m));
      }
    }
   
    public static boolean registerNativeMethodsInWeasel(WeaselInterpreter wi){
      WeaselNativeMethodAccessor tmp;
      while(methods.size()>0){
        tmp = methods.remove(0);
        wi.registerNativeMethod(tmp.getName(), tmp);
      }
      return finished;
    }
  }
}
TOP

Related Classes of powercraftCombi.Test$WeaselNativeSourceManager

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.